Задачи по массивам. Уровень 1

Задача 1:

Дан массив из 10 целых чисел, заменить в нём все отрицательные числа на равные им по модулю положительные.
Входные данные:
Первая строка содержит 10 целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Выведите получившейся массив.

Пример:

Ввод Вывод
0 -1 2 3 -4 -5 6 7 8 -9 0 1 2 3 4 5 6 7 8 9

В этой задаче мы будем на каждом шаге цикла проверять является ли этот элемент отрицательным, если да, то меняем его знак.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[10], i;
	for (i = 0; i < 10; i++) {
		scanf("%i", &A[i]);
	}
	for (i = 0; i < 10; i++) {
		if (A[i] < 0) {
			A[i] = A[i] * (-1);
		}
	}
	for (i = 0; i < 10; i++) {
		printf("%i ", A[i]);
	}
	return 0;
}

Задача 2:

Дан массив из 10 целых чисел, найти в нём минимальное положительное число, если положительных чисел нет - вывести -1.
Входные данные:
Первая строка содержит 10 целых чисел ai (-10^3 ≤ ai ≤ 10^3), разделенных пробелами — элементы массива.
Выходные данные:
Вывести ответ на задачу.

Пример:

Ввод Вывод
0 -1 2 3 -4 -5 6 7 8 -9 2
-4 -5 -2 -1 -52 -8 -7 -34 -65 -5 -1

Инцилизировать переменную min можно значением большим, чем максимально возможное вводимое число.
Переменная flag позволяет нам определить есть ли в массиве положительные числа. flag = 1(true), flag = 0 (false).

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[10], i, flag, min;
	for (i = 0; i < 10; i++) {
		scanf("%i", &A[i]);
	}
	min = 1001;  // стартовое значение
	flag = 0;  // флаг
	for (i = 0; i < 10; i++) {
		if (A[i] > 0 && A[i] < min) {  // проверяем условия
			min = A[i];
			flag = 1;  // меняем значения флага
		}
	}
	if (flag == 0) {
		printf("-1");
	}
	else {
		printf("%i", min);
	}
	return 0;
}

Задача 3:

Дан массив из N целых чисел. Нужно посчитать количество элементов, которые строго больше введеного числа M.
Входные данные:
Первая строка содержит два целых числа N (1 ≤ N ≤ 10^3) и M (0 ≤ M ≤ 10^9) - количество элементов массива и число M.
Вторая строка содержит N целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Выведите ответ на задачу.

Пример:

Ввод Вывод
5 4
7 3 4 1 10
2
6 9
4 2 15 11 3 25
3

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int N, M, A[1000], i;
	scanf("%i%i", &N, &M);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	int ans = 0;
	for (i = 0; i < N; i++) {
		if (A[i] > M) {
			ans++;
		}
	}
	printf("%i", ans);
	return 0;
}

Задача 4:

Дан массив из N целых чисел. Массив является четным, если все его элементы четные.
Входные данные:
Первая строка содержит число N (1 ≤ N ≤ 10^3) - количество элементов массива.
Вторая строка содержит N целых чисел ai (1 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Если массив является четным, то выведите YES, иначе NO

Пример:

Ввод Вывод
6
3 5 12 7 8 177
NO
4
34 6 12 18
YES
5
4 12 6 3 26
NO

Операция (%) нужна, чтобы вычислить остаток от деления одного числа на другое, в нашем случае элемента массива на 2. Если остаток от деления на 2 равен 0, то число четное. Теперь остается подсчитать количество таких чисел в массиве.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[1000], N, i, k;
	scanf("%i", &N);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	int num = 0;
	for (i = 0; i < N; i++) {
		if (A[i] % 2 == 0) {  // проверка на четность
			num++;
		}
	}
	if (num == N) {
		printf("YES");
	}
	else {
		printf("NO");
	}
	return 0;
}

Задача 5:

Дан массив из N целых чисел, нужно посчитать количество элементов, которые больше среднего арифметического всех элементов массива.
Входные данные:
Первая строка содержит число N (1 ≤ N ≤ 10^3) - количество элементов массива.
Вторая строка содержит N целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Выведите ответ на задачу.

Пример:

ввод вывод
6
3 2 8 1 4 2
2
5
2 6 4 8 7
3

Для решения задачи нужно два цикла for. Первый, чтобы посчитать сумму элементов, а второй для подсчета элементов, которые больше ср. арифметического. Чтобы подсчитать ср. арифметическое, нужен тип данных с плавующей запятой - float.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[1000], N, i, sum;
	float ar;
	scanf("%i", &N);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	sum = 0;  // стартовое значение
	for (i = 0; i < N; i++) {
		sum = sum + A[i];
	}
	ar = sum / N;  // ср. арифметическое
	int ans = 0;  // стартовое значение
	for (i = 0; i < N; i++) {
		if (A[i] > ar) {
			ans++;
		}
	}
	printf("%i", ans);
	return 0;
}

Задача 6:

Дан массив из N целых чисел, нужно вывести массив без повторяющихся элементов.
Входные данные:
Первая строка содержит число N (1 ≤ N ≤ 10^3) - количество элементов массива.
Вторая строка содержит N целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Выведите получившейся массив.

Пример:

ввод вывод
8
3 3 2 8 8 1 4 2
3 2 8 1 4 2
3
1 1 1
1
5
7 3 3 3 2
7 3 2

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[1000], N, i;
	scanf("%i", &N);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	for (i = 0; i < N - 1; i++) {
		if (A[i] != A[i + 1]) {  // проверка элемента
			printf("%i ", A[i]);
		}
	}
	printf("%i ", A[i]);  // вывод последнего элемента 
	return 0;
}

Задача 7:

Дан массив из N элементов, нужно вывести количество элементов, которые делятся на M и являются четными.
Входные данные:
Первая строка содержит число N (1 ≤ N ≤ 10^3) - количество элементов массива.
Вторая строка содержит N целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Выведите ответ на задачу.

Пример:

ввод вывод
7 3
5 3 8 12 154 15 23
1
4 12
61 60 139 144
2

Операция (%) нужна, чтобы проверить остаток от деления одного числа на другое.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int N, M, i, ans;
	int A[1000];
	scanf("%i%i", &N, &M);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	ans = 0;  // стартовое значение
	for (i = 0; i < N; i++) {
		if (A[i] % 2 == 0 && A[i] % M == 0) {
			ans++;
		}
	}
	printf("%i", ans);
	return 0;
}

Задача 8:

Вводят целое положительное число X (1 ≤ X ≤ 10^15), вывести число, составленное из цифр исходного числа, но в обратном порядке.

Пример:

ввод вывод
432765 567234
83014734543 34543741038

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[16], i, j, R;
	long long int X;
	scanf("%lli", &X);
	i = 0;
	while (X > 0) {
		R = X % 10;
		A[i] = R;  
		X = X / 10;
		i++;
	}
	for (j = 0; j < i; j++) { 
		printf("%i", A[j]);
	}
	return 0;
}

Задача 9:

Дан массив из N элементов. Этот массив разбит на 3 части: от 0 индекса до A, от A + 1 до B и от B + 1 до N - 1, для лучшего понимания смотрите пример. Нужно вывести сумму каждого участка массива.
Входные данные:
Первая строка содержит числа N - количество элементов(N < 1000), A - первая граница(A ≥ 0 и A < B), B - вторая граница(B > A и B < N - 1).
Вторая строка содержит N целых чисел ai (0 ≤ ai ≤ 10^9), разделенных пробелами — элементы массива.
Выходные данные:
Вывести сумму на каждом участке через пробел.

Пример:

ввод вывод
6 1 4
21 6 1 8 16 27
27 25 27
9 2 4
6 21 13 32 17 1 11 24 3
40 49 39

Пояснение к примеру 2

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int N, i, sum1, sum2, sum3;
	int M[1000], A, B;
	scanf("%i%i%i", &N, &A, &B);
	for (i = 0; i < N; i++) {
		scanf("%i", &M[i]);
	}
	sum1 = sum2 = sum3 = 0;
	i = 0;
	while (i < N) {
		if (i <= A) {
			sum1 = sum1 + M[i];
		}
		if (i > A && i <= B) { 
			sum2 = sum2 + M[i];
		}
		if (i > B) {
			sum3 = sum3 + M[i];
		}
		i++;
	}
	printf("%i %i %i", sum1, sum2, sum3);
	return 0;
}

Задача 10:

Дано число X, нужно удалить из него k-ую цифру.
Входные данные:
Первая строка содержит два целых числа X (1 ≤ X ≤ 10^18) и k (1 ≤ k ≤ 19) - число и номер цифры, которую нужно удалить.
Выходные данные:
Вывести число без k-ой цифры.

Пример:

ввод вывод
143284 4 14384
947821834 8 94782184

При данном решении в массив A запишется обратная последовательность цифр числа X. Поэтому вывод числа начинаем в обратном порядке(начиная с A[l - 1] и до A[0]).

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	long long X;
	int i, j, h, k, A[20];
	scanf("%lli%i", &X, &k);
	i = 0;
	while (X > 0) {
		h = X % 10;
		A[i] = h;
		i++;
		X = X / 10;
	}
	int l = i;  // длина массива цифр
	for (i = l - 1; i >= 0; i--) {
		if (l - i != k) {
			printf("%i", A[i]);
		}
	}
	return 0;
}

Задача 11:

Дан массив из N (1 ≤ N ≤ 1000) целых чисел, нужно передвинуть все элементы массива влево, а первый элемент должен встать на последнее место.

Пример:

ввод вывод
5
4 3 12 6 31
3 12 6 31 4
8
21 4 6 8 34 23 12 43
4 6 8 34 23 12 43 21

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[1000], i, j, buf, N;
	scanf("%i", &N);
	for (i = 0; i < N; i++) {
		scanf("%i", &A[i]);
	}
	buf = A[0]; 
	for (i = 0; i < N - 1; i++) {
		A[i] = A[i + 1];
	}
	A[N - 1] = buf;
	for (i = 0; i < N; i++) {
		printf("%i ", A[i]);
	}
	return 0;
}


Code.C © Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru